/*
 * LZHUFF.h
 *
 *  Created on: 17/06/2014
 *      Author: ariel
 */

#ifndef LZHUFF_H_
#define LZHUFF_H_

#include <string>
#include "../ICompresor.h"
#include <iostream>
using namespace std;

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <cstdio>
#include <ctime>
#include "Huffman.h"
#include "Nodo.h"
#include "lz77.h"
#include "compresor.h"

class LZHUFF: public ICompresor {
public:
	LZHUFF();
	virtual void compimir(string pathSource,string pathDest);
	virtual void descompimir(string pathSource,string pathDest);
	virtual ~LZHUFF();

private:
	void shiftearBitsBufferIzquierda(Buffer *buffer, int cantidad);
	void shiftearBitsBufferDerecha(Buffer *buffer, int cantidad);
	void leerArchivoComprimir(FILE* archivoEntrada, FILE* archivoSalida, Huffman*arbolCompresor);
	void aplicarHuffman(const char *nombreOriginal, const char *nombreArchivoFinal);
	void leerArchivoDescomprimir(FILE* archivoEntrada, FILE* archivoSalida, Huffman*arbolDescompresor);
	const char* revertirHuffman(const char *nombreOriginal);
	void imprimirError(int codigo);
	void eliminarTemporal(const char *nombreOriginal, const char *sufijo);
};

#endif /* LZHUFF_H_ */
